package thread;

/**
 * @User: vitobo
 * @Date: 2024-07-29
 * @Description: 线程的状态转换
 */


public class ThreadDemo11 {



    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            for (int i = 0; i < 100; i++) {
                // 循环体中啥也不做, 也不sleep

                // 加上sleep之后, 后续的打印状态中, 具体是RUNNABLE还是TIME_WAITING就不确定了
                // 取决于当前的t线程 是运行到哪个环节了;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        // 启动之前, 获取 t 的状态, 就是 NEW 状态.
        System.out.println("start之前: " + t.getState());

        // 一个线程, 只能start一次;
        t.start();

        // 通过循环获取, 当前的t线程的状态,取决于系统中的调度操作;
        for (int i = 0; i < 1000; i++) {
            System.out.println("t执行中的状态: " + t.getState());
        }
        System.out.println("t执行中的状态: " + t.getState());

        t.join();

        // 线程执行完毕之后, 就是 TERMINATED 状态
        System.out.println("start之前: " + t.getState());

    }

    public static void main1(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            for (int i = 0; i < 100000; i++) {
                //

            }
        });

        // 启动之前, 获取 t 的状态, 就是 NEW 状态.
        System.out.println("start之前: " + t.getState());

        // 一个线程, 只能start一次;
        t.start();
        t.join();

        // 线程执行完毕之后, 就是 TERMINATED 状态
        System.out.println("start之前: " + t.getState());

    }
}
